#ifndef __Collections_ICollection_H__
#define __Collections_ICollection_H__

///<summary>
/// ICollection<T>
///</summary>
//+ requires: Collections_IEnumerable(T)->Collections_IEnumerator(T)
#define Collections_ICollection(T) bindT(Collections_ICollection,T)
#define Declare_Collections_ICollection(T, Ti) \
	private enum { \
		_Collections_ICollection_##T##VIndex_Add, \
		_Collections_ICollection_##T##VIndex_Clear, \
		_Collections_ICollection_##T##VIndex_Contains, \
		_Collections_ICollection_##T##VIndex_CopyTo, \
		_Collections_ICollection_##T##VIndex_Remove, \
		_Collections_ICollection_##T##VIndex_getCount, \
		_Collections_ICollection_##T##VIndex_getIsReadOnly, \
		_Collections_ICollection_##T##VIndexNext, \
	}; \
	public interfaceT(Collections_ICollection,T,classInterface(Collections_IEnumerable(T)), \
		virtualT(Collections_ICollection,T,void,Add, Ti item); \
		virtualT(Collections_ICollection,T,void,Clear); \
		virtualT(Collections_ICollection,T,void,Contains, Ti item); \
		virtualT(Collections_ICollection,T,void,CopyTo, Ti array[], int_ arrayIndex); \
		virtualT(Collections_ICollection,T,void,Remove, Ti item); \
		getVirtualT(Collections_ICollection,T,int_,Count); \
		getVirtualT(Collections_ICollection,T,bool,IsReadOnly); \
	);
#define Implement_Collections_ICollection(T, Ti) \
	Implement_TypeTI(Collections_ICollection,T,)

#endif /* __Collections_ICollection_H__ */